package 哈希表;

import java.util.*;

/**
 * @PackageName: 哈希表
 * @ClassName: LeetCode599
 * @Author: chen jinxu
 * @Date: 2022/3/14 21:23
假设 Andy 和 Doris 想在晚餐时选择一家餐厅，并且他们都有一个表示最喜爱餐厅的列表，每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个，则输出所有答案并且不考虑顺序。
你可以假设答案总是存在。
输入: list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"]，
list2 = ["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
输出: ["Shogun"]
解释: 他们唯一共同喜爱的餐厅是“Shogun”。

输入:list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"]，list2 = ["KFC", "Shogun", "Burger King"]
输出: ["Shogun"]
解释: 他们共同喜爱且具有最小索引和的餐厅是“Shogun”，它有最小的索引和1(0+1)。
 */
public class LeetCode599 {
    public static void main(String[] args) {
        String[] list1 = {"Shogun", "Tapioca Express", "Burger King", "KFC"};
        String[] list2 = {"KFC", "Shogun", "Burger King"};
        String[] result = findRestaurant(list1, list2);
        System.out.println(Arrays.toString(result));
    }

    public static String[] findRestaurant(String[] list1, String[] list2) {
        List<String> result = new ArrayList<String>();
        Map<String, Integer> map2 = new HashMap<>();
        int indexSum = Integer.MAX_VALUE;
        for (int i = 0; i < list2.length; i++) {
            map2.put(list2[i], i);
        }
        for (int i = 0; i < list1.length; i++) {
            if (map2.containsKey(list1[i])) {
                int sum = i + map2.get(list1[i]);
                if (sum < indexSum) {
                    result.clear();
                    result.add(list1[i]);
                    indexSum = sum;
                } else if (sum == indexSum) {
                    result.add(list1[i]);
                }
            }
        }
        return result.toArray(new String[result.size()]);
    }
}
